package com.xp.dto;

import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Size;

/**
 * 节点定义请求参数
 * 用于创建和更新节点定义
 *
 * @author xp
 * @since 2024-01-01
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class NodeDefinitionRequest {

    /**
     * 主键ID（更新时必填）
     */
    private Long id;

    /**
     * 节点编码
     */
    @NotBlank(message = "节点编码不能为空")
    @Size(max = 50, message = "节点编码长度不能超过50个字符")
    @Pattern(regexp = "^[a-zA-Z][a-zA-Z0-9_]*$", message = "节点编码必须以字母开头，只能包含字母、数字和下划线")
    private String nodeCode;

    /**
     * 节点名称
     */
    @NotBlank(message = "节点名称不能为空")
    @Size(max = 100, message = "节点名称长度不能超过100个字符")
    private String nodeName;

    /**
     * 节点描述
     */
    @Size(max = 500, message = "节点描述长度不能超过500个字符")
    private String nodeDesc;

    /**
     * 节点类型
     */
    @NotBlank(message = "节点类型不能为空")
    private String nodeType;

    /**
     * 节点分类
     */
    @NotBlank(message = "节点分类不能为空")
    private String category;

    /**
     * 节点图标
     */
    @Size(max = 100, message = "节点图标长度不能超过100个字符")
    private String icon;

    /**
     * 节点颜色
     */
    @Size(max = 20, message = "节点颜色长度不能超过20个字符")
    private String color;

    /**
     * 组件类名
     */
    @Size(max = 200, message = "组件类名长度不能超过200个字符")
    private String componentClass;

    /**
     * 输入参数Schema（JSON Schema格式）
     */
    private String inputSchema;

    /**
     * 输出参数Schema（JSON Schema格式）
     */
    private String outputSchema;

    /**
     * 配置参数Schema（JSON Schema格式）
     */
    private String configSchema;

    /**
     * 默认配置（JSON格式）
     */
    private String defaultConfig;

    /**
     * 脚本模板
     */
    private String scriptTemplate;

    /**
     * 版本号
     */
    @Size(max = 20, message = "版本号长度不能超过20个字符")
    private String version;

    /**
     * 状态：0-禁用，1-启用，2-废弃
     */
    @NotNull(message = "状态不能为空")
    private Integer status;

    /**
     * 排序顺序
     */
    private Integer sortOrder;

    /**
     * 创建人ID
     */
    private Long creatorId;
}